<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <!-- 引入vue2的js文件 -->
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.7.9/vue.js"></script>
  </head>
  <body>
    <div id="app">
      <p>原计划吃: {{ food }}</p>
      <button @click="changeFood">中奖了</button>
      <p>person is {{ person.name }} {{ person.age }}</p>
      <!-- <button @click="this.person.age++">更加成熟了</button> -->
      <button @click="person.age++">更加成熟了</button>
    </div>

    <script>
      new Vue({
        el: '#app',
        data: {
          food: '猪脚饭',
          person: {
            name: '李秋雨',
            age: 22,
            address: {
              province: '吉林',
              city: '长春'
            }
          }
        },
        watch: {
          // 简单写法（模型当成函数名）
          /**
          food(newValue, oldValue) {
            console.log('---newValue---', newValue)
            console.log('---oldValue---', oldValue)
          },**/
          //   需求：第一次的值也要打印，后续变了也要监听到，就只能写复杂的写法了
          food: {
            // 里面处理函数式固定写法（handler）
            handler(newValue, oldValue) {
              console.log('---newValue---', newValue)
              console.log('---oldValue---', oldValue)
            },
            immediate: true // 加了这个属性之后，无论数据变没变，第一次都会执行
          },
          // 如果是复杂的类型，不能使用简单的写法咯
          /**
          person(newValue, oldValue) {
            console.log('---newValue---', newValue)
            console.log('---oldValue---', oldValue)
          }
          **/
          // 复杂的写法是写成对象（针对引用类型）
          person: {
            // 里面处理函数式固定写法（handler）
            handler(newValue) {
              console.log(newValue)
            },
            deep: true
          }
        },
        methods: {
          changeFood() {
            this.food = '螺蛳粉'
          }
        }
      })
    </script>
  </body>
</html>
